What is joycon?
Joycon is a configuration file loader for Node.js that supports multiple formats such as JSON, YAML, and JavaScript. It allows you to load and merge configuration files from different sources, making it easier to manage application settings.
What are joycon's main functionalities?
Load Configuration Files
This feature allows you to load configuration files in different formats. The code sample demonstrates how to load JSON and YAML configuration files and access the merged configuration data.
const JoyCon = require('joycon');
const joycon = new JoyCon();
joycon.load(['config.json', 'config.yaml']).then(result => {
console.log(result.data);
});
Specify Custom Loaders
Joycon allows you to specify custom loaders for different file formats. The code sample shows how to add a custom loader for files with a '.custom' extension and load them using Joycon.
const JoyCon = require('joycon');
const joycon = new JoyCon();
joycon.addLoader({
test: /\.custom$/, // Regex to match custom file extension
load: async (filePath) => {
const content = await fs.promises.readFile(filePath, 'utf8');
return parseCustomFormat(content); // Custom parsing logic
}
});
joycon.load(['config.custom']).then(result => {
console.log(result.data);
});
Merge Configuration Files
Joycon can merge multiple configuration files into a single configuration object. The code sample demonstrates how to load and merge JSON and YAML configuration files.
const JoyCon = require('joycon');
const joycon = new JoyCon();
joycon.load(['config.json', 'config.yaml']).then(result => {
const mergedConfig = result.data;
console.log(mergedConfig);
});
Other packages similar to joycon
cosmiconfig
Cosmiconfig is a popular configuration file loader that supports multiple formats like JSON, YAML, and JavaScript. It provides a flexible API for loading and merging configuration files. Compared to Joycon, Cosmiconfig offers more built-in features and a larger community, but Joycon provides more flexibility with custom loaders.
rc
RC is a simple configuration loader that supports JSON, INI, and environment variables. It is less flexible than Joycon and Cosmiconfig but is very easy to use for basic configuration loading needs. RC is suitable for simpler use cases where advanced features like custom loaders are not required.
config
Config is a configuration management tool for Node.js that supports hierarchical configurations and multiple file formats. It is more feature-rich than Joycon, offering environment-specific configurations and runtime configuration changes. However, it is also more complex to set up and use.
joycon
JoyCon is zero-dependency but feature-complete.
Install
yarn add joycon
Usage
const JoyCon = require('joycon')
const joycon = new JoyCon()
joycon.load(['package-lock.json', 'yarn.lock'])
.then(result => {
})
By default non-js files are parsed as JSON, if you want something different you can add a loader:
const joycon = new JoyCon()
joycon.addLoader({
test: /\.toml$/,
load(filepath) {
return require('toml').parse(filepath)
}
})
joycon.load(['cargo.toml'])
API
constructor([options])
options
files
The files to search.
cwd
The directory to search files.
stopDir
The directory to stop searching.
packageKey
You can load config from certain property in a package.json
file. For example, when you set packageKey: 'babel'
, it will load the babel
property in package.json
instead of the entire data.
parseJSON
- Type:
(str: string) => any
- Default:
JSON.parse
The function used to parse JSON string.
resolve([files], [cwd], [stopDir])
resolve([options])
files
defaults to options.files
.
cwd
defaults to options.cwd
.
stopDir
defaults to options.stopDir
then path.parse(cwd).root
.
If using a single object options
, it will be the same as constructor options.
Search files and resolve the path of the file we found.
There's also .resolveSync
method.
load(...args)
The signature is the same as resolve.
Search files and resolve { path, data }
of the file we found.
There's also .loadSync
method.
addLoader(Loader)
interface Loader {
name?: string
test: RegExp
load(filepath: string)?: Promise<any>
loadSync(filepath: string)?: any
}
At least one of load
and loadSync
is required, depending on whether you're calling the synchonous methods or not.
removeLoader(name)
Remove loaders by loader name.
clearCache()
Each JoyCon instance uses its own cache.
Contributing
- Fork it!
- Create your feature branch:
git checkout -b my-new-feature
- Commit your changes:
git commit -am 'Add some feature'
- Push to the branch:
git push origin my-new-feature
- Submit a pull request :D
Author
joycon © egoist, Released under the MIT License.
Authored and maintained by egoist with help from contributors (list).
github.com/egoist · GitHub @egoist · Twitter @_egoistlily